package com.cy.pj.sys.service.impl;

import com.cy.pj.common.exception.ServiceException;
import com.cy.pj.common.pojo.*;
import com.cy.pj.sys.dao.SysRoleDao;
import com.cy.pj.sys.dao.SysRoleMenuDao;
import com.cy.pj.sys.dao.SysUserRoleDao;
import com.cy.pj.sys.service.SysRoleService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.StringUtils;

import java.util.List;

@Service
public class SysRoleServiceImpl implements SysRoleService {

    @Autowired
    private SysRoleDao sysRoleDao;
    @Autowired
    private SysRoleMenuDao sysRoleMenuDao;
    @Autowired
    private SysUserRoleDao sysUserRoleDao;

    @Override
    public List<CheckBox> findObjects() {

        return sysRoleDao.findObjects();
    }
    @Override
    public int updateObject(SysRole entity,Integer[] menuIds){
        if(entity==null) {
            throw new IllegalArgumentException("更新的对象不能为空");
        }
        if(entity.getId()==null) {
            throw new IllegalArgumentException("id的值不能为空");
        }

        if(StringUtils.isEmpty(entity.getName())) {
            throw new IllegalArgumentException("角色名不能为空");
        }
        if(menuIds==null||menuIds.length==0) {
            throw new IllegalArgumentException("必须为角色指定一个权限");
        }

        //更新数据
        int rows=sysRoleDao.updateObject(entity);
        if (rows==0)
        {
            throw new ServiceException("对象可能已经不存在");
        }

        sysRoleMenuDao.deleteObjectsByRoleId(entity.getId());
        sysRoleMenuDao.insertObjects(entity.getId(),menuIds);
        return rows;
    }

    @Override
    public SysRoleMenuVo findObjectById(Integer id) {
        if (id==null||id<0)
        {
            throw new IllegalArgumentException("id值不合法");
        }
        SysRoleMenuVo result=sysRoleDao.findObjectById(id);
        if (result==null)
        {
            throw new ServiceException("此记录已存在");
        }
        return result;
    }



    @Override
    public int saveObject(SysRole entity, Integer[] menuIds) {
        if (entity==null)
        {
            throw new IllegalArgumentException("保存对象不能为空");
        }
        if (StringUtils.isEmpty(entity.getName())){
            throw new IllegalArgumentException("角色名不允许为空");
        }
        if (menuIds==null||menuIds.length==0)
        {
            throw new ServiceException("必须为角色分配权限，否则不允许保存");
        }

        int rows=sysRoleDao.insertObject(entity);
        sysRoleMenuDao.insertObjects(entity.getId(),menuIds);
        return rows;
    }
    @Override
    public int deleteObject(Integer id) {
        //1.验证数据的合法性
        if(id==null||id<=0) {
            throw new IllegalArgumentException("请先选择");
        }
        //3.基于id删除关系数据
        sysRoleMenuDao.deleteObjectsByRoleId(id);
        sysUserRoleDao.deleteObjectsByRoleId(id);
        //4.删除角色自身
        int rows=sysRoleDao.deleteObject(id);
        if(rows==0) {
            throw new ServiceException("此记录可能已经不存在");
        }
        //5.返回结果
        return rows;
    }



    @Override
    public PageObject<SysRole> findPageObjects(String name, Integer pageCurrent) {
        if(pageCurrent==null||pageCurrent<1)
        {
            throw new IllegalArgumentException("您传入的当前页码值无效");
        }
       /* int rowCount =sysRoleDao.getRowCount(name);
        if (rowCount==0)
        {
            throw new ServiceException("没有找到相应的记录");
        }*/

        int pageSize=3;
        /*int startIndex=(pageCurrent-1)*pageSize;*/
        Page<SysRole> page= PageHelper.startPage(pageCurrent, pageSize);
        List<SysRole> records=sysRoleDao.findPageObjects(name);
        return new PageObject<>((int)page.getTotal(),records,pageCurrent,pageSize);

    }
}
